﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HCQ2_Model.Pay
{
    /// <summary>
    /// 添加进购物车参数
    /// </summary>
    public class ShoppingAddParams : IPayUser, IPayCommodityInfo,IValidatableObject
    {
        /// <summary>
        /// 【必填】购买人ID
        /// </summary>
        [Required(ErrorMessage ="购买人Id不能为空")]
        public string userid { get; set; }

        /// <summary>
        /// 【必填】购买商品ID
        /// </summary>
        [Required(ErrorMessage ="购买商品ID不能为空")]
        public Nullable<int> CommodityId { get; set; }
        /// <summary>
        /// 购买商品期限；1（一个月）、3（三个月）、6（六个月）12（一年）<br/>
        /// 修改记录：<br/>
        /// 2021-9-16：对需求《2021-9-16-微信修改需求.png》处理
        /// </summary>      
        public Nullable<int> PurchasePeriod { get; set; } = 0;

        #region 需求《VLions需求规格_度度圈接口需求_订单及购物车-202100909.docx》添加的内容

        /// <summary>
        /// 店铺ID，默认0
        /// </summary>
        public Nullable<int> StoreID { get; set; } = 0;

        /// <summary>
        /// 商品数量，默认值=1（虚拟商品不需要设置数量）
        /// </summary>
        public Nullable<int> Quantity { get; set; } = 1;

        /// <summary>
        /// 下单类别，0=普通下单（默认值），1=扫码点餐下单
        /// </summary>
        public Nullable<int> OrderType { get; set; } = 0;


        #endregion

        /// <summary>
        /// 规格列表
        /// <br/>
        /// 2021-9-16：禅道170号需求添加
        /// </summary>
        public List<SpecParamModel> Specs { get; set; }

        /// <summary>
        /// 验证
        /// </summary>
        /// <param name="validationContext"></param>
        /// <returns></returns>
        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            ShoppingAddParams param = validationContext.ObjectInstance as ShoppingAddParams;

            if (param != null)
            {
                //购买期限
                if (!PurchasePeriodEnum.CheckPurchasePeriod(param.PurchasePeriod.Value))
                {
                    yield return new ValidationResult("购买商品期限值无效，必须是：0（永久，实物不设期限）、1（一个月）、3（三个月）、6（六个月）12（一年）其中之一", new string[] { "PurchasePeriod" });
                }
            }
        }
    }
}
